From 27f7a2e065484cdfd4f5aec5ead09fd428743ba9 Mon Sep 17 00:00:00 2001 From: robertl Date: Sun, 11 Oct 2009 21:20:27 +0000 Subject: [PATCH] Added read-only support for Jogmap files. --- gpsbabel/Makefile.in | 2 +- gpsbabel/jogmap.c | 130 ++++++++++++++++++++++++++++ gpsbabel/reference/track/jogmap.xml | 42 +++++++++ gpsbabel/vecs.c | 7 ++ gpsbabel/xmldoc/formats/jogmap.xml | 3 + 5 files changed, 183 insertions(+), 1 deletion(-) create mode 100644 gpsbabel/jogmap.c create mode 100644 gpsbabel/reference/track/jogmap.xml create mode 100644 gpsbabel/xmldoc/formats/jogmap.xml diff --git a/gpsbabel/Makefile.in b/gpsbabel/Makefile.in index 97bd8ddf2..2afcacb5d 100644 --- a/gpsbabel/Makefile.in +++ b/gpsbabel/Makefile.in @@ -64,7 +64,7 @@ ALL_FMTS=$(MINIMAL_FMTS) gtm.o gpsutil.o pcx.o cetus.o copilot.o \ igo8.o gopal.o humminbird.o mapasia.o gnav_trl.o navitel.o ggv_ovl.o \ jtr.o sbp.o sbn.o mmo.o skyforce.o itracku.o v900.o delbin.o \ pocketfms_bc.o pocketfms_fp.o pocketfms_wp.o naviguide.o enigma.o \ - vpl.o teletype.o \ + vpl.o teletype.o jogmap.o \ FMTS=@FMTS@ diff --git a/gpsbabel/jogmap.c b/gpsbabel/jogmap.c new file mode 100644 index 000000000..2740b9eb1 --- /dev/null +++ b/gpsbabel/jogmap.c @@ -0,0 +1,130 @@ +/* + + Support for XML files from jogmap.de + + Copyright (C) 2009 Robert Lipe robertlipe@gpsbabel.org + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA + +*/ + +#include "defs.h" +#include "xmlgeneric.h" +#include "jeeps/gpsmath.h" +#include "garmin_tables.h" + +static route_head *trk; +static gbfile *fout; + +static arglist_t jogmap_args[] = +{ + ARG_TERMINATOR +}; + +#define MYNAME "xol" + +#if ! HAVE_LIBEXPAT +void +jogmap_rd_init(const char *fname) +{ + fatal(MYNAME ": This build excluded \"" MYNAME "\" support because expat was not installed.\n"); +} + +void +jogmap_read(void) +{ +} + +#else + +static xg_callback jogmap_shape, xol_shape_end; +static xg_callback jogmap_waypt, xol_overlay; + +#define XOL "/overlays/overlay" + + + +static void +jogmap_markers(const char *args, const char **attrv) +{ + trk = route_head_alloc(); + track_add_head(trk); +} + +static void +jogmap_marker(const char *args, const char **attrv) +{ + const char **avp = &attrv[0]; + waypoint *wpt = waypt_new(); + + while (*avp) { + if (strcmp(avp[0], "lat") == 0) { + sscanf(avp[1], "%lf", + &wpt->latitude); + } else + if (strcmp(avp[0], "lng") == 0) { + sscanf(avp[1], "%lf", + &wpt->longitude); + } + + avp+=2; + } + + if (trk) track_add_wpt(trk, wpt); +} + +static +xg_tag_mapping jogmap_map[] = { + { jogmap_markers, cb_start, "/markers" }, + { jogmap_marker, cb_start, "/markers/marker" }, + { NULL, 0, NULL } +}; + +static void +jogmap_rd_init(const char *fname) +{ + trk = NULL; + xml_init(fname, jogmap_map, NULL); +} + +static void +jogmap_read(void) +{ + xml_read(); +} + +#endif + +static void +jogmap_rd_deinit(void) +{ + xml_deinit(); +} + +ff_vecs_t jogmap_vecs = { + ff_type_file, + { ff_cap_none, /* waypoints */ + ff_cap_read, /* tracks */ + ff_cap_none }, /* routes */ + jogmap_rd_init, + NULL, + jogmap_rd_deinit, + NULL, + jogmap_read, + NULL, + NULL, + jogmap_args, + CET_CHARSET_UTF8, 0 +}; diff --git a/gpsbabel/reference/track/jogmap.xml b/gpsbabel/reference/track/jogmap.xml new file mode 100644 index 000000000..099cadd39 --- /dev/null +++ b/gpsbabel/reference/track/jogmap.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gpsbabel/vecs.c b/gpsbabel/vecs.c index 45497f11f..302b6314d 100644 --- a/gpsbabel/vecs.c +++ b/gpsbabel/vecs.c @@ -167,6 +167,7 @@ extern ff_vecs_t pocketfms_wp_vecs; extern ff_vecs_t enigma_vecs; extern ff_vecs_t vpl_vecs; extern ff_vecs_t teletype_vecs; +extern ff_vecs_t jogmap_vecs; static vecs_t vec_list[] = { @@ -977,6 +978,12 @@ vecs_t vec_list[] = { "SkyTraq Venus based loggers Binary File Format", "bin" }, + { + &jogmap_vecs, + "jogmap", + "Jogmap.de XML format", + "xml" + }, #endif // MAXIMAL_ENABLED { NULL, diff --git a/gpsbabel/xmldoc/formats/jogmap.xml b/gpsbabel/xmldoc/formats/jogmap.xml new file mode 100644 index 000000000..2cf170b1c --- /dev/null +++ b/gpsbabel/xmldoc/formats/jogmap.xml @@ -0,0 +1,3 @@ + + This read-only format reads the XML marker files from as tracks. Each "markers" entry is a new track with each "marker" entry being a trackpoint. + -- 2.30.2